This invention relates to direct placement of bulk data into application buffers and reassembly of messages.
When data is transmitted from one device to another it is controlled by a protocol such as Transport Control Protocol (TCP). A receiving device or host runs a receive process that moves the data to the required destination such as application buffers. Nowadays this process is usually implemented in software.
In current implementations data is moved via the Network Interface Card (NIC) to TCP receive buffers in the host memory. The Central Processing Unit (CPU) receives an interrupt, which may be on a per segment basis. The TCP receive process verifies that the data is in order, also on a per segment basis, and the data is finally copied into application buffers.
During this process there are two data moves across the system bus and per segment TCP receive processing by the host is slow.
The data transmitted by the TCP protocol will have originated in another xe2x80x98higher layerxe2x80x99 protocol. One such protocol is the iSCSI specification that defines a transport protocol for SCSI and maps the SCSI remote procedure invocation model on top of TCP.
Communications between a device on a network and a server (often termed client and server, or in SCSI specification xe2x80x98Initiatorxe2x80x99 and xe2x80x98Targetxe2x80x99) are divided into messages, termed iSCSI protocol data units (PDUs). The iSCSI PDUs are variable in length and consist of a message iSCSI header plus optional data, also termed the bulk data. Typically the bulk data consists of data blocks being moved between client and server.
TCP also uses variable length segments and packages PDUs received from iSCSI into segments for the transmission. An individual iSCSI PDU may be packaged across several TCP segments, for example when it contains a lot of data in addition to the iSCSI header, or when the iSCSI PDUs contain only headers of control or status information and no bulk data, several PDUs may be packaged into a single TCP segment.
Although there are not current implementations, there are proposals under iSCSI protocol for direct placement of the data portions of the iSCSI PDUs into preassigned application buffers in host memory without it being stored in TCP receive buffers. This would save on bus bandwidth, as the data is not transferred twice, and on the TCP receive side buffer space is also saved as the bulk data is not stored in the TCP receive buffers.
The present invention is directed towards implementing direct data placement message reassembly.
According to the invention there is provided a data reassembly process for a message that comprises a header and a bulk data portion and is received in a plurality of segments, in which bulk data is placed directly into application buffers and a receive buffer stores an indication of the size of the directly placed data from a plurality of segments.
The invention also provides an interface for a data reassembly process for messages that each comprise a header and a bulk data portion that are received in a plurality of segments and for which the bulk data can be placed directly into application buffers, the interface comprising a receive buffer for storing summary information including indication of the cumulative size of the directly placed data from said plurality of segments.